/*
 * basic_header.h
 *
 *  Created on: Jun 28, 2024
 *      Author: root
 */

#ifndef INC_BASIC_HEADER_H_
#define INC_BASIC_HEADER_H_

#include <src/config/config.h>

#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <arpa/inet.h>/* See NOTES */
#include <sys/socket.h>
#include <sys/time.h>
#include <unistd.h>
#include <fcntl.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdbool.h>
#include <stdio.h>
#include <string.h>
#include <stdint.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <sys/types.h>          /* See NOTES */
#include <sys/socket.h>
#include <sys/stat.h>

#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <sys/types.h>
#include <unistd.h>
#include <assert.h>
#include <sys/epoll.h>
#include <arpa/inet.h>
#include <sys/mman.h>
#include <sys/types.h>
#include <sys/ipc.h>
#include <sys/msg.h>
#include <sys/un.h>
#include <sys/uio.h>
#include <signal.h>

#ifdef __cplusplus
extern "C" {

void my_assert(const void *expr, const void *file, int line, const void *fun,
		const char *str);

}
#endif

#define ASSERT(con,str) do{\
			if (!(con)){ \
				perror(#con);\
				my_assert(#con,__FILE__, __LINE__, __ASSERT_FUNCTION,str);\
				__assert_fail (#con, __FILE__, __LINE__, __ASSERT_FUNCTION);\
			} \
		}while(0)
#define NL "\n"  // next line char
#define MEM_ZERO(t)   memset(&(t),0,sizeof(t))
#ifndef __cplusplus  // not define c++
#define max(a,b) ((a)>(b))?(a):(b)
#define min(a,b) ((a)>(b))?(b):(a)
#endif	// end not define c++

#ifdef __cplusplus //// for c++
#include <vector>
#include <atomic>
#include <tuple>
#include <mutex>
#include <memory>
#include <cassert>
#include <cstring>
#include <iostream>
#include <fstream>
#include <thread>
#include <condition_variable>
#include <cstdarg>
#include <queue>
#include <ctime>
#include <functional>
#include <set>
#include <map>
#include <unordered_map>
#include <unordered_set>
#include <algorithm>
#include <ctime>
#include <regex>

#define CREATE_BASE_LOCK(name) 		std::mutex name
#define BASE_LOCK(l)			  	std::lock_guard<std::mutex> lock(l);

#endif		/// end for c++

#endif /* INC_BASIC_HEADER_H_ */
